package com.test.baseGroovy

import com.test.groovy.Song

/**
 * BaseTest--GroovyTest
 *
 * @author: Jovi
 *
 * @createTime: 2018-06-12 15:34
 *
 * */

/*====================================基本语法============================================*/


def s1 = 'i am 100 $ dolloar' //单引号中的内容严格对应Java中的String，不对 $ 符号进行转义
println s1

def x = 100
def s2 = "i am $x dolloar" //双引号的内容则和脚本语言的处理有点像，如果字符中有$号的话，则它会表达式先求值
println s2

/*三个引号”’xxx”’中的字符串支持随意换行*/
def s3 = ''' 
x
y   c
z   d   e
'''
println s3

/*====================================定义变量&函数============================================*/

//支持动态类型
a = 1
b = "字符串"
double c = 1.0

//无参函数，无返回类型的函数定义，必须使用def关键字 ，最后一行代码的执行结果就是本函数的返回值
def fun1() {
}

//有参函数，无需指定参数类型
def fun2(def1, def2) {
}

//如果指定了函数返回类型，则可不必加def关键字来定义函数
String fun3() {
    return "返回值"
}

def getSomething() {
    "getSomething" //如果这是最后一行代码，则返回类型为String
    1000 //如果这是最后一行代码，则返回类型为Integer
}

//def s4 = "abc"
//assert s4.size() > 4 //如果断言发生，断言后面的代码无法执行

/*====================================循环 for============================================*/
for (i = 0; i < 5; i++) {
    println "测试"
}

for (i in 0..<5) {
    println "hello"
}

4.times {
    println it
}

/*====================================三目运算符============================================*/
def name = 'ds'
def result = name?:"abc"
println result

/*====================================捕获异常============================================*/
try {
    println 5/0
} catch (Exception e) {
    e.printStackTrace()
}

try {
    println 5 / 0
} catch (exception) {
    exception.printStackTrace()
}

/*====================================switch============================================*/
age = 20
def rate

switch (age) {
    case 10..20:
        rate = "nihao"
        break
    case 21..30:
        rate = "nibuhao"
        break
    default:
        throw new IllegalAccessException()
}

println rate


/*====================================判断是否为真============================================*/
Song song = new Song()

//Java 写法
if (song!= null){
    if (song.name!=null){
        println "haha"
    }
}

//Groovy
println song?.name?:"aaa"


/*====================================asType============================================*/

//String 转 int
def s5 = x as int
def s6 = x.asType(Integer)
println s5.getClass()
println s6.getClass()

